#include "sommet.hpp"


double Sommet::getX()
{
	return x;
}

double Sommet::getY()
{
	return y;
}

double Sommet::getZ()
{
	return z;
}

int Sommet::getId()
{
	return id;
}

Face* Sommet::getFace() const
{
	return face;
}

void Sommet::setFace(Face* f)
{
	face = f;
}

bool Sommet::operator==(const Sommet& s)const
{
	return (id==s.id);
}

std::ostream & operator<<(std::ostream & out, const Sommet& b)
{
	return out<<b.x<<" "<<b.y<<" "<<b.z;
}



/*******************************************************************
 * 				IterSommetAdj
*******************************************************************/

void Sommet::IterSommetAdj::operator++()
{
	//on récupere l'index du sommet de départ et on prend la face qui se trouve à sa gauche
	f=f->getFace((f->getIndex(*s)+1)%3);
	fin=true;//permet de différencier la face de départ et la face d'arrivée
}

void Sommet::IterSommetAdj::operator++(int i)
{
	//on récupere l'index du sommet de départ et on prend la face qui se trouve à sa gauche
	f=f->getFace((f->getIndex(*s)+1)%3);
	fin=true;
}

bool Sommet::IterSommetAdj::operator==(const IterSommetAdj& is)
{
	return (s==is.s && f==is.f && fin==is.fin);
}

bool Sommet::IterSommetAdj::operator!=(const IterSommetAdj& is)
{
	return (s!=is.s || f!=is.f || fin!=is.fin);
}
Sommet& Sommet::IterSommetAdj::operator*()
{
	//on récupere l'index du sommet de départ et on prend le sommet qui se trouve à sa gauche
	return *(f->getSommet((f->getIndex(*s)+1)%3));
}



/*******************************************************************
 * 				IterFaceAdj
*******************************************************************/

void Sommet::IterFaceAdj::operator++()
{
	//on récupere l'index du sommet de départ et on prend la face qui se trouve à sa gauche
	f=f->getFace((f->getIndex(*s)+1)%3);
	fin=true;
}

void Sommet::IterFaceAdj::operator++(int i)
{
	//on récupere l'index du sommet de départ et on prend la face qui se trouve à sa gauche
	f=f->getFace((f->getIndex(*s)+1)%3);
	fin=true;
}

bool Sommet::IterFaceAdj::operator==(const IterFaceAdj& is)
{
	return (s==is.s && f==is.f && fin==is.fin);
}

bool Sommet::IterFaceAdj::operator!=(const IterFaceAdj& is)
{
	return (s!=is.s || f!=is.f || fin!=is.fin);
}
Face& Sommet::IterFaceAdj::operator*()
{
	return *f;
}


